package test.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
 * 可以使用 @Order 注解指定切面的优先级, 值越小优先级越高
 */
@Order(2) 
/**
 * Aspect 表示该类是一个切面
 * @author 37798955@qq.com
 *
 */
@Aspect
@Component
public class AspectDemo {
	//定义切入点 通常是某个接口函数 ,也可指定具体类的方法
    @Pointcut("execution(* test.aop.ISay.*(..))")
    private void pointcut() {}  // signature
    //表示在什么时候执行
    @Before("pointcut()")
    public void before(){ //函数名随便取只要不冲突

        System.out.println("before Hello");
    }
    @AfterReturning("pointcut()")
    public void afterreturning(){  //函数名随便取只要不冲突
        System.out.println(" afterreturning Hello");
    }
    @After("pointcut()")
    public void after(){  //函数名随便取只要不冲突
        System.out.println(" after Hello");
    }
    //@Around ("pointcut()")
    public void around(){ //函数名随便取只要不冲突
        System.out.println("around Hello");
    }
}